﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TWiStEr.Math;
using Phys.Model.Affectors;

namespace Phys.Model {

	/// <summary>
	/// Represents physical object in the World.
	/// </summary>
	public interface IObject {
		/// <summary>
		/// Gets or sets the name of the object
		/// </summary>
		string Name { get; set; }

		/// <summary>
		/// Gets or sets the postion of the object
		/// </summary>
		Vector Position { get; set; }

		/// <summary>
		/// Gets or sets the momentum of the object.
		/// Measured in kilogramm*meter/second.
		/// </summary>
		Vector Momentum { get; set; }

		/// <summary>
		/// Gets or sets the acceleration of the object.
		/// Measured in meter/second^2.
		/// </summary>
		Vector Acceleration { get; set; }

		/// <summary>
		/// Gets or sets the velocity of the object.
		/// Measured in meter/second.
		/// </summary>
		Vector Velocity { get; set; }

		/// <summary>
		/// Gets or sets the forces affecting the object
		/// </summary>
		Vector Forces { get; set; }

		/// <summary>
		/// Gets or sets the momentum of the object.
		/// Measured in kilogramms.
		/// </summary>
		double Mass { get; set; }

		/// <summary>
		/// Gets the affectors which are affecting this object
		/// </summary>
		IList<IAffector> Affectors { get; }
		
		/// <summary>
		/// The parent World for this object
		/// </summary>
		WorldObject World { get; set; }
	}
}
